Vertex AI Experiments
https://gyazo.com/580f64e7b3abb1ee5dd1acfa47d00f74
概念
日本語 UI と英語でまあまあ違う...
テスト(experiment)
テスト実行(experiment run)
パラメータ(parameter)
指標(metrics)
実行(Execution)
アーティファクト(artifact)
実行は、データの前処理、トレーニング、モデル評価(ただし、これらに限定されない)を含む ML ワークフローのステップ
Vertex AI Metadata はより抽象的なデータストアで、それの実験用か
ExperimentRun は Execution の1種?
table:metadata
MetadataType Schema VertexAI SDK Class
Context system.PipelineRun aiplatform.PipelineJob
Context system.ExperimentRun aiplatform.ExperimentRun
Execution system.Run aiplatform.ExperimentRun
Experiment は?
VertexAI Metadata の schema て何
system.Dataset
system.Artifact
system.Model
system.Metrics
公開されているメタデータ リソースは、ML Metadata(MLMD)のオープンソース実装のものとほぼ同じです。
これとおなじ?
基本的な記録
とりあえずしばらくはパラメータいじりつつモデルの評価をやる際の記録場所として使うので学習中の指標は興味ない
code:sample.py
from google.cloud import aiplatform
aiplatform.init(
experiment=experiment_name,
experiment_description=experiment_description,
experiment_tensorboard=False,
project=project,
location=location,
)
with aiplatform.start_run('') as run:
run.log_params({'key': value})
run.log_metrics({'score': 123})
init 色々やりすぎ
run の中で log_params 何回呼んでもよい、マージされる、後勝ち
デフォルトでは同じ名前の run を作るとエラーになる、start_run(name, resume=True) で追記(上書き)可能
初回から resume=True はエラー
params, metrics に渡せるのは単純なスカラのみ、float, int, str
flat にする util とかないのかな?
log_params と log_metrics はまあ当然別空間、同じキーあってもくっつかない
metrics や artifact 消したい
繰り返し実行すると都度記録されてしまう、そりゃそうだ
parameter や metric を消す方法は無さそう、run ごと葬るしか無い
code:delete.py
with aiplatform.start_run(...) as run:
# 最初↓を書いていた
with aiplatform.start_run(...) as run:
artifacts = aiplatform.Artifact.list(filter=f'in_context("{run.resource_name}")')
for artifact in artifacts:
artifact.delete()
ClassificationMetrics の記録
code:classification.py
run.log_classification_metrics(
display_name="foobar",
matrix=metrics.confusion_matrix(
).tolist(), # np.array はだめ
# ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() のようなエラーが出る
)
run と artifact どう対応させる?
run は artifact 持てない (log_model はできる) ので
start_run した中で start_execution して execution に artifact 紐づける
exec.assing_input_artifacts([dataset_artifact])
exec.assing_output_artifacts([model_artifact])
run の metrics として execution.get_output_artifacts()[0].lineage_console_uri を保存
うーん、VertexAI Metadata のリネージにモチベーションないなら素朴にに run の中で gcs にアップロードして url 記録したらいいな